let [n, m] = readline().split(' ').map((item) => parseInt(item)) // 读出n和m 表示n行m列
let chessBoard = []
for (let i = 0; i < n; i++) {
  let row = readline().split(' ').map((item) => parseInt(item)) // 读出每一行
  chessBoard.push(row) // 放入棋盘中
}
let [x, y, z, w] = readline().split(' ').map((item) => parseInt(item)) // 读出坐标
let resCount = 0 // 走的路径方法个数
let dirs = [[-1, 0], [1, 0], [0, -1], [0, 1]] // 可以向四个方向走
let visited = new Array(n).fill(0).map(() => new Array(m).fill(0)) // 表示没访问过
visited[x][y] = 1 // 这个访问过
function dfs (x, y) {
  for (let i = 0; i < dirs.length; i++) {
    let nx = x + dirs[i][0]
    let ny = y + dirs[i][1] // 新的xy左边
    if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue // 越界进入下一次循环
    if (chessBoard[nx][ny] <= chessBoard[x][y]) {
      // 新的点的高度小于等于当前的
      continue // 也不行
    }
    if (visited[nx][ny] === 1) {
      // 访问过也不行
      continue
    }
    visited[nx][ny] = 1 // 表示这个访问过了
    if (nx === z && ny === w) {
      // 如果到达目标
      resCount++ // 路径++
    } else {
      // 如果不是
      dfs(nx, ny) // 以这个为起点继续判断
    }
    visited[nx][ny] = 0 // 重置未访问
  }
}
dfs(x, y)
console.log(resCount % 1e9);